<?php
/**
 * PrynLib
 * @copyright 2007-2009 Prynel
 * @author Olivier ROGER <roger.olivier@gmail.com>
 * @category libPrynel
 * @package Util
 * @version $Revision: 80 $
 */

/**
 * Gestion des erreurs personnalisée
 * <code>$errorHandler = ErrorHandler::getInstance();</code>
 * 
 * @category libPrynel
 * @package Util
 * @version 1.0.0 
 * @author Olivier ROGER <roger.olivier@gmail.com>
 * @copyright  2007-2009 Prynel
 *      
 */

class Util_ErrorHandler
{
	private static $errorHandler;
	private $arrOfMsg = array();
	private $errorContainer = '<div style="padding: .8em; margin-bottom: 1em; border: 2px solid #ff0000;background: #FBE3E4; color: #8a1f11;">
								<h3 style="margin-top:5px;">Erreur</h3>';
	private $warnContainer  = '<div style="padding: .8em; margin-bottom: 1em; border: 2px solid #ff9601;background: #fbefe3; color: #d65b09;">
								<h3 style="margin-top:5px;">Avertissement</h3>';
	private $noticeContainer = '<div style="padding: .8em; margin-bottom: 1em; border: 2px solid #012bff;background: #e3e9fb; color: #0956d6;">
								<h3 style="margin-top:5px;">Avis</h3>';
	/**
	 * Constructeur. Appel de la fonction de callback
	 * pour la gestion personnalisé des erreurs.
	 * 
	 * @access private
	 */
	private function __construct()
	{
		set_error_handler(array($this,'getError'));
	}
	
	/**
	 * Créer l'instance du singleton si elle n'existe pas
	 *
	 * @return errorHandler
	 */
	public static function getInstance() 
	{
		if (!isset(self::$errorHandler)) 
		{
			self::$errorHandler	= new self();	
		}
		return self::$errorHandler;
	}
	
	/**
	 * Gestion des erreurs "attrapées"
	 * @param int $errno Numéro de l'erreur
	 * @param string $errstr Message d'erreur
	 * @param string $errfile Fichier concerné
	 * @param int $errline Numéro de ligne
	 *
	 */
	public function getError($errno, $errstr, $errfile, $errline)
	{
		$tempMsgError = '';
		switch($errno)
		{
			case E_ERROR:
				$tempMsgError.=$this->errorContainer;
				break;
			case E_WARNING:
				$tempMsgError.=$this->warnContainer;
				break;
			case E_NOTICE:
				$tempMsgError.=$this->noticeContainer;
				break;
			case E_USER_ERROR:
				$tempMsgError.=$this->errorContainer;
				break;
			case E_USER_WARNING:
				$tempMsgError.=$this->warnContainer;
				break;
			case E_USER_NOTICE:
				$tempMsgError.=$this->errorContainer;
				break;
			case E_STRICT:
				$tempMsgError.=$this->errorContainer;
				break;
			default:
				$tempMsgError.=$this->errorContainer;
		}
		$tempMsgError.='<strong>Message :</strong>'.$errstr.'<br /> <strong>Ligne :</strong> '.$errline.'<br /> <strong>Fichier :</strong> '.$errfile.'</div>';
		$this->arrOfMsg[] = $tempMsgError;
	}
	
	public function __destruct()
	{
		if(count($this->arrOfMsg)>0)
		{
			foreach($this->arrOfMsg as $msgErreur)
			{
				echo $msgErreur;
			}
		}
	}
}
 ?>